package models;

import static org.hamcrest.Matchers.equalTo;
import static org.hamcrest.Matchers.is;
import static org.hamcrest.Matchers.notNullValue;
import java.util.List;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import play.data.validation.Validation;
import play.test.UnitTest;

public class UnUtilisateurDevrait extends UnitTest {

	@Test
	public void pouvoiEtreCree() {
		utilisateur = new Utilisateur("rene", "rene.pantoi@gmail.com", "9IOS83DI");
		assertThat(utilisateur.surnom, equalTo("rene"));
		assertThat(utilisateur.email, equalTo("rene.pantoi@gmail.com"));
		assertThat(utilisateur.motDePasse, equalTo("9IOS83DI"));
		assertThat(utilisateur.cadeaux, is(notNullValue()));
	}

	@Test
	public void pouvoirAjouterUnCadeauASaListe() {
		utilisateur.ajouteCadeau("Une voiture neuve");
		Cadeau playstation3 = utilisateur.cadeaux.get(0);
		assertThat(playstation3.libelle, equalTo("Une voiture neuve"));
	}

	@Test
	public void nePasPouvoirAjouterUnCadeauVideASaListe() {
		utilisateur.ajouteCadeau("");
		assertThat(Validation.current().errors().size(), equalTo(1));
		assertThat(Validation.current().errors().get(0).message(), equalTo("Ce champ est obligatoire"));
	}

	@Test
	public void pouvoirSupprimerUnCadeauASaListe() {
		Cadeau cadeau = utilisateur.ajouteCadeau("Un pyjama à fleur");
		cadeau.id = 18L;

		utilisateur.supprimeCadeau(cadeau.id);
		List<Cadeau> listeDeCadeaux = utilisateur.cadeaux;
		assertThat(listeDeCadeaux.size(), equalTo(0));
	}

	@Test
	public void pouvoirAccederASaListeDeCadeauTriéParOrdreDAjout() {
		Cadeau playstation3 = utilisateur.ajouteCadeau("PlayStation 3");
		Cadeau poney = utilisateur.ajouteCadeau("Poney");
		Cadeau chupaChups = utilisateur.ajouteCadeau("Chupa Chups");

		List<Cadeau> listeDeCadeaux = utilisateur.cadeaux;
		assertThat(listeDeCadeaux.size(), equalTo(3));
		assertThat(listeDeCadeaux.get(0), equalTo(playstation3));
		assertThat(listeDeCadeaux.get(1), equalTo(poney));
		assertThat(listeDeCadeaux.get(2), equalTo(chupaChups));
	}

	@Test
	public void pouvoirAccederASaListeOrdonneeDAmis() {
		Utilisateur ami1 = new Utilisateur("a1", "ami1@hotmail.fr", "IONSIC");
		utilisateur.ajouteAmi(ami1);
			
		Utilisateur ami2 = new Utilisateur("a2", "ami2@hotmail.fr", "IOKELS");
		utilisateur.ajouteAmi(ami2);
		
		List<Utilisateur> listeDAmis = utilisateur.amis;
		assertThat(listeDAmis.size(), equalTo(2));
		assertThat(listeDAmis.get(0), equalTo(ami2));
		assertThat(listeDAmis.get(1), equalTo(ami1));
	}

	@Before
	public void intialisation() {
		utilisateur = new Utilisateur("toto", "toto@hotmail.fr", "ISJOZILD");
	}

	@After
	public void nettoyage() {
		utilisateur = null;
	}

	private Utilisateur utilisateur;
}
